home *** CD-ROM | disk | FTP | other *** search
- /*
- File: Caster.c
- Main source file for Caster, a sample QuickTime Conferencing application
- Loosely on Philco, a SeeWorld extravaganza, courtesy Guy Riddle.
-
- Copyright: © 1995 by Apple Computer, Inc.
- All rights reserved.
- */
-
- #define SystemSevenOrLater 1
- #include <DiskInit.h>
- #include <Fonts.h>
- #include <Resources.h>
- #include <AppleEvents.h>
- #include <ToolUtils.h>
- #include <SegLoad.h>
- #include <Devices.h>
- #include <String.h>
- #include <OSUtils.h>
- #include <Scrap.h>
-
- #include "QuickTimeConferencing.h"
- #include "caster.h"
- #include "casting.h"
- #include "shared.h"
-
- /* Prototypes ******************************************/
- void InitMac( void );
- ComponentResult InitApp( void );
-
- void EndApp( void );
- DialogPtr OpenSplashScreen( void );
- void EventLoop( void );
-
- ComponentResult ProcessUserEvent( void );
- ComponentResult HandleMouseDown( EventRecord* currEvent );
- ComponentResult HandleKeyDown( EventRecord* currEvent );
- ComponentResult HandleHighLevelEvent( EventRecord* currEvent);
- ComponentResult HandleDiskEvent( EventRecord* currEvent );
-
- void AdjustMenus( void );
- ComponentResult HandleMenuItem( long selection );
- ComponentResult HandleAppleMenu( short menuItem );
- ComponentResult HandleFileMenu( short menuItem );
- ComponentResult HandleEditMenu( short menuItem );
- ComponentResult HandleSettingsMenu( short menuItem );
- ComponentResult DoNetworkSettings( void );
-
- /* Globals *****************************************/
- WindowPtr gMainWindow;
- SeqGrabComponent gSequenceGrabber;
- SGChannel gVideoChannel;
- SGChannel gSoundChannel;
- CastRecord* gCastRecord;
- Str63 gCastName;
-
- /***************************************************
- Main
- ****************************************************/
- void main( void ) {
-
- DialogPtr splash;
- ComponentResult err = noErr;
-
- InitMac();
-
- splash = OpenSplashScreen();
-
- err = InitApp();
-
- if (splash)
- DisposDialog(splash);
-
- if (err == noErr)
- EventLoop();
- else
- DisplayErrorAlert( err );
-
- EndApp();
- ExitToShell();
- }
-
- /***************************************************
- InitMac
- ****************************************************/
- void InitMac( void ) {
-
- InitGraf((Ptr) &qd.thePort);
- InitFonts();
- InitWindows();
- InitMenus();
- TEInit();
- InitDialogs(nil);
- InitCursor();
- EnterMovies();
- }
-
- /***************************************************
- InitMac
- ****************************************************/
- ComponentResult InitApp( void ) {
-
- ComponentResult result = noErr;
- Handle menuBar;
-
- menuBar = GetNewMBar(kMenuBarID);
- if (menuBar)
- {
- SetMenuBar(menuBar);
- DisposHandle(menuBar);
- AddResMenu(GetMHandle(kAppleMenuID), 'DRVR');
- DrawMenuBar();
- }
- else
- result = ResError();
-
- GetUserName( gCastName );
-
- gMainWindow = GetNewCWindow(kMainWindowID, nil, (WindowPtr)-1);
-
- if (gMainWindow == nil)
- result = resNotFound; /* can't get the main window */
- else
- SetWTitle( gMainWindow, gCastName );
-
- if ((result == noErr) && gMainWindow)
- result = SetupSequenceGrabber( &gSequenceGrabber, &gSoundChannel, &gVideoChannel, nil );
-
- if (result == noErr)
- result = OpenCast( gMainWindow, gSequenceGrabber, &gCastRecord );
-
- if (result == noErr)
- ShowWindow( gMainWindow );
-
- return result;
- }
-
- /***************************************************
- EndApp
- ****************************************************/
- void EndApp( void ) {
-
- CloseCast( gCastRecord );
- DisposeWindow( gMainWindow );
- ExitMovies();
-
- }
-
- /***************************************************
- EventLoop
- ****************************************************/
- void EventLoop( void ) {
-
- ComponentResult err = noErr;
-
- do {
-
- CheckCast( gCastRecord);
- err = ProcessUserEvent();
- DisplayErrorAlert( err );
-
- } while ( err != kTimeToQuit );
- }
-
- /***************************************************
- ProcessUserEvent
- ****************************************************/
- ComponentResult ProcessUserEvent( void ) {
-
- ComponentResult err = noErr;
- EventRecord currEvent;
- Boolean handled;
-
- WaitNextEvent(everyEvent, &currEvent, 1, 0);
-
- handled = IsCastEvent( gCastRecord, &currEvent );
-
- if( !handled )
- {
- switch (currEvent.what) {
- case mouseDown:
- err = HandleMouseDown( &currEvent );
- break;
-
- case keyDown:
- err = HandleKeyDown( &currEvent );
- break;
-
- case kHighLevelEvent:
- err = HandleHighLevelEvent( &currEvent);
- break;
-
- case diskEvt:
- err = HandleDiskEvent( &currEvent );
- break;
-
- default:
- break;
- }
- }
- return err;
- }
-
-
- /***************************************************
- HandleMouseDown
- ****************************************************/
- ComponentResult HandleMouseDown( EventRecord* currEvent ) {
-
- ComponentResult err = noErr;
- WindowPtr eventWindow;
- short part;
- long whichMenuItem;
-
- part = FindWindow(currEvent->where, &eventWindow);
-
- switch(part){
- case inMenuBar:
- AdjustMenus();
- whichMenuItem = MenuSelect(currEvent->where);
- err = HandleMenuItem( whichMenuItem);
- break;
-
- case inDrag:
- /* we need to notify the sequence grabber that the window has changed */
- CastChangedWindowBefore( gCastRecord, false );
- DragWindow( eventWindow, currEvent->where, &(*GetGrayRgn())->rgnBBox );
- CastChangedWindowBefore( gCastRecord, true );
- break;
-
- /* window related events are handled by the conference component */
- default:
- break;
- }
-
- return err;
- }
-
- /***************************************************
- HandleKeyDown
- ****************************************************/
- ComponentResult HandleKeyDown( EventRecord* currEvent ) {
-
- ComponentResult err = noErr;
- long whichMenuItem;
-
- if(currEvent->modifiers & cmdKey){
- AdjustMenus();
- whichMenuItem = MenuKey(currEvent->message & charCodeMask);
- err = HandleMenuItem(whichMenuItem);
- }
-
- return err;
- }
-
- /***************************************************
- HandleHighLevelEvent
- ****************************************************/
- ComponentResult HandleHighLevelEvent( EventRecord* currEvent) {
-
- ComponentResult err = noErr;
-
- AEProcessAppleEvent(currEvent);
-
- return err;
- }
-
- /***************************************************
- HandleDiskEvent
- ****************************************************/
- ComponentResult HandleDiskEvent( EventRecord* currEvent ) {
-
- ComponentResult err = noErr;
- Point where;
-
- if(HiWord(currEvent->message)){
- SetPt(&where, kDILeft, kDITop);
- err = DIBadMount(where, currEvent->message);
- }
-
- return err;
- }
-
- /***************************************************
- HandleMenuItem
- ****************************************************/
- ComponentResult HandleMenuItem( long selection ) {
-
- ComponentResult err = noErr;
- short menuID = HiWord(selection);
- short menuItem = LoWord(selection);
-
- switch (menuID) {
-
- case kAppleMenuID:
- err = HandleAppleMenu( menuItem );
- break;
- case kFileMenuID:
- err = HandleFileMenu( menuItem );
- break;
- case kEditMenuID:
- err = HandleEditMenu( menuItem );
- break;
- case kSettingsMenuID:
- err = HandleSettingsMenu( menuItem );
- break;
- }
-
- HiliteMenu(0);
-
- return err;
- }
-
- /***************************************************
- HandleAppleMenu
- ****************************************************/
- ComponentResult HandleAppleMenu( short menuItem ) {
-
- ComponentResult err = noErr;
- Str255 daName;
-
- switch (menuItem) {
-
- case kAboutMenuItem:
- DoAboutBox();
- break;
-
- default: /* all non-About items in this menu are DAs */
- GetItem(GetMHandle(kAppleMenuID), menuItem, daName);
- OpenDeskAcc(daName);
- }
-
- return err;
- }
-
- /***************************************************
- HandleFileMenu
- ****************************************************/
- ComponentResult HandleFileMenu( short menuItem ) {
-
- ComponentResult err = noErr;
-
- switch (menuItem) {
-
- case kCastMenuItem:
- if (IsCasting( gCastRecord ))
- err = StopCasting( gCastRecord );
- else
- err = StartCasting( gCastRecord, gCastName );
- break;
- case kQuitMenuItem:
- err = kTimeToQuit;
- break;
- default: /* there shouldn't be any */
- break;
- }
-
- return err;
- }
-
- /***************************************************
- HandleEditMenu
- ****************************************************/
- ComponentResult HandleEditMenu( short menuItem ) {
-
- ComponentResult err = noErr;
- Boolean handled;
-
- handled = SystemEdit(menuItem-1);
-
- if (!handled ) /* if this is our edit... */
- {
- switch (menuItem) {
-
- case kCopyMenuItem:
- if ( FrontWindow() == gMainWindow )
- {
- Handle pic;
-
- err = CopyCast( gCastRecord, (PicHandle*)&pic );
-
- if ( pic && (err == noErr) )
- {
- HLock(pic);
- err = ZeroScrap();
- if (err == noErr)
- err = PutScrap(GetHandleSize(pic), 'PICT', *pic);
- DisposeHandle( pic);
- }
- }
- break;
- default: /* we only know how to copy now... */
- break;
- }
- }
-
- return err;
- }
-
- /***************************************************
- HandleSettingsMenu
- ****************************************************/
- ComponentResult HandleSettingsMenu( short menuItem ) {
-
- ComponentResult err = noErr;
-
- switch (menuItem) {
- case kNetworkSettingsItem:
- err = DoNetworkSettings();
- break;
- case kVideoSettingsItem:
- err = CastChannelSettings( gCastRecord, gVideoChannel );
- break;
- case kSoundSettingsItem:
- err = CastChannelSettings( gCastRecord, gSoundChannel );
- break;
- case kEnableSoundItem:
- break;
- case kEnableVideoItem:
- break;
- default: /* we only know how to copy now... */
- break;
- }
-
- return err;
- }
-
- /***************************************************
- AdjustMenus
- ****************************************************/
- void AdjustMenus( void ) {
-
- StringHandle itemString;
- MenuHandle appleMenu = GetMHandle(kAppleMenuID);
- MenuHandle fileMenu = GetMHandle(kFileMenuID);
- MenuHandle editMenu = GetMHandle(kEditMenuID);
- MenuHandle settingsMenu = GetMHandle(kSettingsMenuID);
-
- EnableItem( appleMenu, kAboutMenuItem );
- EnableItem( fileMenu, kQuitMenuItem );
-
- if ( FrontWindow() == gMainWindow )
- {
- EnableItem( editMenu, kCopyMenuItem );
- }
- else
- {
- DisableItem( editMenu, kCopyMenuItem );
- }
-
- if (IsCasting( gCastRecord ))
- itemString = GetString(kStopCastStringID);
- else
- itemString = GetString(kStartCastStringID);
-
- if ( gVideoChannel)
- {
- EnableItem( settingsMenu, kVideoSettingsItem );
- CheckItem( settingsMenu, kEnableVideoItem, true );
- }
- else
- {
- DisableItem( settingsMenu, kVideoSettingsItem );
- CheckItem( settingsMenu, kEnableVideoItem, false );
- }
-
- if ( gSoundChannel )
- {
- EnableItem( settingsMenu, kSoundSettingsItem );
- CheckItem( settingsMenu, kEnableSoundItem, true );
- }
- else
- {
- DisableItem( settingsMenu, kSoundSettingsItem );
- CheckItem( settingsMenu, kEnableSoundItem, false );
- }
-
- SetMenuItemText(fileMenu, kCastMenuItem, *itemString);
- ReleaseResource( (Handle)itemString );
-
- DisableItem( editMenu, kUndoMenuItem );
- DisableItem( editMenu, kCutMenuItem );
- DisableItem( editMenu, kPasteMenuItem );
- DisableItem( editMenu, kClearMenuItem );
- }
-
- /***************************************************
- DoNetworkSettings
- ****************************************************/
- ComponentResult DoNetworkSettings( void ) {
-
- DialogPtr settingsDialog;
- short itemHit;
- ComponentResult err;
- Handle item;
- Boolean wasCasting;
-
- settingsDialog = GetNewDialog(kNetworkSettingsID, nil, (WindowRef) -1);
-
- if (settingsDialog) {
-
- GetDialogItem(settingsDialog, kNameTextItem, nil, &item, nil);
- SetDialogItemText(item, gCastName);
- SetDialogDefaultItem(settingsDialog, kOKItem);
-
- do {
- ModalDialog(nil, &itemHit);
- } while (( itemHit != kOKItem ) && (itemHit != kCancelItem));
-
- if (itemHit == kOKItem)
- {
- wasCasting = IsCasting( gCastRecord );
-
- if (wasCasting)
- StopCasting( gCastRecord );
-
- GetDialogItemText(item, gCastName );
-
- SetWTitle( gMainWindow, gCastName );
-
- if (wasCasting)
- err = StartCasting( gCastRecord, gCastName );
- }
-
- DisposeDialog(settingsDialog);
- }
- else
- err = ResError();
-
- return err;
- }
-
-
-